package br.com.mftc.efitness.beans;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import br.com.mftc.efitness.basicas.Academia;
import br.com.mftc.efitness.basicas.Cidade;
import br.com.mftc.efitness.basicas.Endereco;
import br.com.mftc.efitness.basicas.UF;
import br.com.mftc.efitness.excecoes.ExcecaoCamposObrigatoriosNaoPreenchidos;
import br.com.mftc.efitness.excecoes.ExcecaoCaracteresEspeciaisNaoSaoPermitidos;
import br.com.mftc.efitness.excecoes.ExcecaoGeral;
import br.com.mftc.efitness.excecoes.ExcecaoNegocio;
import br.com.mftc.efitness.util.Variaveis;

@ManagedBean(name = "novaAcademia")
@ViewScoped
public class NovaAcademiaBean {
	
	@ManagedProperty("#{mensagens}")
	private MensagensBean mensagens;
	
	@ManagedProperty("#{fachada}")
	private FachadaBean fachada;
	
	private List<Cidade> cidades;
	private List<UF> ufs;
	private UF ufSelecionado;
	private Academia academia;
	
	@PostConstruct
	public void inicializar() {
		(academia = new Academia()).setEndereco(new Endereco());
		
		ufs = Arrays.asList(UF.values());
		
		cidades = new ArrayList<Cidade>();
	}
	
	public void inserirAcademia() {
		try {
			fachada.inserirAcademia(academia);
			
			academia = new Academia();
			
			ufSelecionado = null;
			
			mensagens.addMensagem(FacesMessage.SEVERITY_INFO, Variaveis.TITULO_SUCESSO, Variaveis.MODAL_NOVA_ACADEMIA_MENSAGEM_SUCESSO);
		} catch (ExcecaoCamposObrigatoriosNaoPreenchidos excecao) {
			mensagens.addMensagem(FacesMessage.SEVERITY_WARN, excecao);
		} catch (ExcecaoCaracteresEspeciaisNaoSaoPermitidos | ExcecaoNegocio | ExcecaoGeral excecao) {
			mensagens.addMensagem(FacesMessage.SEVERITY_FATAL, excecao);
		}
	}

	public Academia getAcademia() {
		return academia;
	}

	public void setAcademia(Academia academia) {
		this.academia = academia;
	}

	public List<UF> getUfs() {
		return ufs;
	}

	public void setUfs(List<UF> ufs) {
		this.ufs = ufs;
	}

	public UF getUfSelecionado() {
		return ufSelecionado;
	}

	public void setUfSelecionado(UF ufSelecionado) {
		this.ufSelecionado = ufSelecionado;
	}

	public List<Cidade> getCidades() {
		cidades.clear();
		if (ufSelecionado != null) {
			try {			
				for (Cidade cidade : fachada.consultarCidadesPorUF(ufSelecionado)) {
					cidades.add(cidade);
				}
			} catch (ExcecaoNegocio excecao) {
				mensagens.addMensagem(FacesMessage.SEVERITY_FATAL, excecao);
			}
		}
		return cidades;
	}
	
	public void setCidades(List<Cidade> cidades) {
		this.cidades = cidades;
	}

	public MensagensBean getMensagens() {
		return mensagens;
	}

	public void setMensagens(MensagensBean mensagens) {
		this.mensagens = mensagens;
	}

	public FachadaBean getFachada() {
		return fachada;
	}

	public void setFachada(FachadaBean fachada) {
		this.fachada = fachada;
	}
}
